home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / Timing / EZCron.lha / EZCron < prev    next >
Text File  |  1996-01-17  |  10KB  |  303 lines

  1. /* EZCron by Jim Hines v1.6 ©1995-1996 All Rights Reserved
  2. ** 10-23-95 Added requester to verify making a NEW cron.config file. See newrtn:
  3. ** 10-25-95 Fixed Bug in the above and added renaming of the old config file. See newrtn:
  4. **             renamed from ACron to EZCron. GUI started on this date too.
  5. ** 11-30-95 added the text string reminder support and the sfx functions
  6. ** 12-05-95 Fixed case sensitivity problem with weekly, monthly & Daily routines 
  7. ** 12-13-95 Added Speech Function
  8. ** 01-04-96 Added Weekdays, Weekend and Quarterly support functions
  9. ** 01-05-96 Fixed a bug in the Weekdays routine.
  10. ** 01-11-96 Cleaned up the code a bit
  11. ** 01-17-95    Added a new routine.  ie every_3_wed
  12. */
  13. /* call trace(all) */
  14.  
  15.  
  16. /* ======== Envirorment Varables == */
  17.     clock = time('N')
  18.     clock2 = LEFT(clock,5)
  19.     date = Date(USA)
  20.     date2 = Date(S)             /*     -> 19920804  */
  21.     date3 = Date(W, date2, 'S')  /*    -> Friday  */
  22.     sec = right(clock, 2)  /* Get Seconds */
  23.     sec2 = 60 - sec        /* 61 (seconds) minus sec) */
  24.     delayvar = sec2 * 50   /* sec2 x 50 ticks or 1 second sets the delay time */
  25.     LT = delayvar / 50
  26.     LTime = 60 - LT
  27.  
  28.     csi='9b'x
  29.     Ital=csi'3m'
  30.     bold=csi'1m'
  31.     norm=csi'0m'
  32.     black=csi'31m'
  33.     white=csi'32m'
  34.     blue=csi'33m'
  35.     LF = '0a'x
  36. /* ========END VARABLES == */
  37.  
  38.     arg command lg .
  39.  
  40.     if ~show('L','rexxsupport.library') then
  41.         call addlib('rexxsupport.library',0,-30)
  42.     if ~show('L','rexxreqtools.library') then
  43.             call addlib("rexxreqtools.library", 0, -30, 0)
  44.  
  45. /* ======== THIS IS THE INPUT PARSING / USAGE SECTION WITH A SUB-ROUTINE== */
  46.  
  47.     select
  48.         when command = 'START' then call startrtn()
  49.         when command = "STOP" then call stoprtn()
  50.         when command = "QUIT" then call stoprtn()
  51.     otherwise
  52.         say ''
  53.         say bold'ERROR,'norm 'Unknown option'blue command norm
  54.         call nulinp()
  55.     end
  56.     
  57. stoprtn:
  58.     if command = "STOP" then do
  59.         if showlist('P', 'ACRON_REXX') then do
  60.             say ital 'Exiting ACron: Please Wait. Program will exit in' LT 'seconds!' norm
  61.             address 'ACRON_REXX' STOP
  62.             exit
  63.         end
  64.     end
  65.     else
  66.         say bold ital 'ACron is not running.' norm
  67.         exit
  68.     end
  69.  
  70. /* =======LOOP== */
  71. startrtn:
  72.     if ~exists('s:cron.config') then do
  73.         call rtezrequest('s:cron.config does NOT exist', "Okay", , "rt_reqpos = reqpos_centerscr")
  74.         exit
  75.     end
  76.  
  77.     RC = showlist('P', 'ACRON_REXX')
  78.     if RC = 1 then do
  79.         say bold ital white 'ACron is Already Active' norm
  80.         exit
  81.     end
  82.  
  83.     openport('ACRON_REXX')
  84.     SIGNAL on HALT
  85.  
  86. /* =======PARSE CONFIG FILE SECTION == */
  87.     do forever
  88.         config = 's:cron.config'        /* Name of file for reading events from */
  89.         event. = 0
  90.  
  91.         if ~open(cronfile, config,'READ') then do
  92.             exit 20
  93.         end
  94.  
  95.         errors = 0
  96.  
  97.         do until eof(cronfile)
  98.             /* Grab the line, parse the event and ignore the comments */
  99.             linein = readln(cronfile)
  100.             parse var linein line '#'
  101.     
  102.             next = event.0 + 1
  103.         
  104.             parse var line event.next.command event.next.pargs1 event.next.pargs2,
  105.             event.next.pargs3 event.next.pargs4 event.next.time    event.next.date,
  106.             event.next.sfx event.next.txt
  107.  
  108.             event.next.date = translate(event.next.date, 'abcdefghijklmnopqrstuvwxyz',,
  109.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  110.                             /* THE ABOVE TRANSLATES THE DATE TO LOWERCASE IF NOT NUMERIC */
  111.  
  112.             event.next.time = translate(event.next.time, 'abcdefghijklmnopqrstuvwxyz',,
  113.                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  114.                             /* THE ABOVE TRANSLATES THE TIME TO LOWERCASE IF NOT NUMERIC */
  115.     
  116.             select
  117.                 when event.next.command = "" then iterate
  118.                 when event.next.command = "" then do
  119.                     say "Not enough fields in:" linein
  120.                     errors =  1
  121.                     iterate
  122.                 end
  123.             otherwise event.0 = next
  124.             end
  125.         end  /* end of the do until eof loop */
  126.         call close(cronfile)
  127.  
  128. /* ======== END OF PARSE SECTION == */
  129.  
  130.         sec = right(clock, 2)  /* Get Seconds */
  131.         sec2 = 60 - sec        /* 60 (seconds) minus sec) */
  132.         delayvar = sec2 * 50   /* sec2 x 50 ticks or 1 second sets the delay time */
  133.         LT = delayvar / 50
  134.         LTime = 60 - LT
  135.  
  136. /* ======== AREXX PORT STUFF == */
  137.         pkt = getpkt('ACRON_REXX')
  138.         if pkt ~= '0000 0000'x then call aport(pkt)
  139.         call delay(delayvar)    /* 3000 would be equal to 1 minute */
  140.     
  141.         do i = 1 to event.0
  142.             clock = time('N')
  143.             clock2 = LEFT(clock,5)
  144.             date = Date(USA)               /*   08/04/92  */
  145.             date2 = Date(S)                /*   19920804  */
  146.             date3 = Date(W, date2, 'S')    /*   Friday    */
  147.     
  148.     /* ======= Arguments Routine == */
  149.             if event.i.pargs1 = '-' then event.i.pargs1 = ''
  150.             if event.i.pargs2 = '-' then event.i.pargs2 = ''
  151.             if event.i.pargs3 = '-' then event.i.pargs3 = ''
  152.             if event.i.pargs4 = '-' then event.i.pargs4 = ''
  153.     
  154.     /* ======= Misc Routines == */
  155.             if event.i.sfx = '-' then event.i.sfx = ''
  156.             if event.i.txt = '-' then event.i.txt = ''
  157.     
  158.     /* ======= Every Minute Routine == */
  159.             if event.i.time = 'minute' then event.i.time = clock2
  160.  
  161.     /* ======= Quarterly Routine Should Go Here == */
  162.             parse var clock2 hrs ':' min
  163.             if min = 00 & event.i.time = 'quarterly' then event.i.time = clock2
  164.             if min = 15 & event.i.time = 'quarterly' then event.i.time = clock2
  165.             if min = 30 & event.i.time = 'quarterly' then event.i.time = clock2
  166.             if min = 45 & event.i.time = 'quarterly' then event.i.time = clock2
  167.  
  168.     /* ======= Every Hour Routine == */
  169.             if min = 00 & event.i.time = 'hourly' then event.i.time = clock2
  170.     
  171.     /* ======= Daily Routine == */
  172.             if event.i.date = 'daily' then event.i.date = date
  173.     
  174.     /* ======= Weekly Routine == */
  175.  
  176.             if event.i.date = 'sunday' & date3 = 'Sunday' then event.i.date = date
  177.             if event.i.date = 'monday' & date3 = 'Monday' then event.i.date = date
  178.             if event.i.date = 'tuesday' & date3 = 'Tuesday' then event.i.date = date
  179.             if event.i.date = 'wednesday' & date3 = 'Wednesday' then event.i.date = date
  180.             if event.i.date = 'thursday' & date3 = 'Thursday' then event.i.date = date
  181.             if event.i.date = 'friday' & date3 = 'Friday' then event.i.date = date
  182.             if event.i.date = 'saturday' & date3 = 'Saturday' then event.i.date = date
  183.  
  184.     /* ======= Weekdays Routine == The 'ol Mon-Fri routine */    
  185.             if event.i.date = 'weekdays' & date3 ~= 'Sunday' & date3 ~= 'Saturday'
  186.                 then event.i.date = date
  187.  
  188.     /* ======= Weekend Routine == The ol' Sat & Sun routine */
  189.             if event.i.date = 'weekend' & date3 = 'Saturday' then event.i.date = date
  190.             if event.i.date = 'weekend' & date3 = 'Sunday' then event.i.date = date
  191.  
  192.     /* ======= Monthly Routine == */
  193.             month.event = event.i.date
  194.             parse var month.event mth '-' day2
  195.             if mth = 'monthly' then do
  196.                 parse var date month '/' day '/' year
  197.                 if day2 = day & event.i.time = clock2 then event.i.date = date
  198.             end
  199.  
  200.     /* ======= # 4th Fri, 2nd Tue, etc routine == */
  201.  
  202.              parse var event.i.date var1 '_' num '_' dow  /* every 2 wed */
  203.             if var1 = 'every' then do
  204.                 del3 = date(n)   /* 20 Apr 88 */
  205.                 parse var del3 del1 cm del2
  206.                 drop del1 del2 /* dont even need them */
  207.  
  208.                 if cm = 'Jan' then cm = 31;if cm = 'Feb' then cm = 29
  209.                 if cm = 'Mar' then cm = 31;if cm = 'Apr' then cm = 30
  210.                 if cm = 'May' then cm = 31;if cm = 'Jun' then cm = 30
  211.                 if cm = 'Jul' then cm = 31;if cm = 'Aug' then cm = 31
  212.                 if cm = 'Sep' then cm = 30;if cm = 'Oct' then cm = 31
  213.                 if cm = 'Nov' then cm = 30;if cm = 'Dec' then cm = 31
  214.                 countvar = 0
  215.  
  216.                 do z = 1 to cm
  217.                     currdate = date(s)                /* 19951221 year month day     */
  218.                     yearmonth = left(currdate, 6)    /* 199512     year month        */
  219.  
  220.                     if z < 10 then do
  221.                         zdate = yearmonth'0'z   /* 19951201 */
  222.                         newz = '0'z
  223.                     end
  224.                     else do
  225.                         zdate = yearmonth''z   /* 19951231 */
  226.                         newz = z
  227.                     end
  228.  
  229.                     myday = Date(W, zdate, 'S')   /* Friday   */
  230.                     myday = left(myday, 3)         /* Fri         */
  231.                     myday = translate(myday, 'abcdefghijklmnopqrstuvwxyz',,
  232.                                     'ABCDEFGHIJKLMNOPQRSTUVWXYZ') /* fri */
  233.  
  234.                     if myday = dow then countvar = countvar + 1
  235.                     if myday = dow & countvar = num then do
  236.                         year = left(zdate, 4)             /* 1995     */
  237.                         year2 = right(year, 2)             /*   95     */
  238.                         month = right(zdate, 4)            /*     1221 */
  239.                         month2 = left(month, 2)         /*       12    */
  240.                         event.i.date = month2'/'newz'/'year2
  241.                         say 'event.i.date =' event.i.date
  242.                         leave
  243.                     end
  244.                 end
  245.             end
  246.  
  247.     /* ======== Logging Routine == */
  248. /*
  249.             if lg = log then do
  250.                    if event.i.time = clock2 & event.i.date = date then do
  251.                     if ~exists('s:cronlog') then do
  252.                         open(log, 's:cronlog', 'W')
  253.                     end
  254.                 else
  255.                     open(log, 's:cronlog', 'A')
  256.                     writeln(log, event.i.command "was executed at" event.i.time "on" event.i.date)
  257.                     close(log)
  258.                 end
  259.             end
  260. */
  261.     /* ======= Final Routine == */
  262. /*            if lg = log then delay(25) /* This delay is to allow for the log file
  263.                                           to be deleted automatically if so desired */ */
  264.                if event.i.time = clock2 & event.i.date = date then
  265.                 address command 'run >NIL:' event.i.command event.i.pargs1,
  266.                 event.i.pargs2 event.i.pargs3 event.i.pargs4
  267.     
  268.             if event.i.time = clock2 & event.i.date = date & event.i.sfx ~= "" then do
  269.                 if exists('EZCron:prefs/sfx.prefs') then do
  270.                     open(sfxconfig, 'EZCron:prefs/sfx.prefs', 'r')
  271.                     sfxplayer = readln(sfxconfig)
  272.                     close(sfxconfig)
  273.                     address command 'run >nil:' sfxplayer event.i.sfx
  274.                 end
  275.             end
  276.     
  277.             if event.i.time = clock2 & event.i.date = date & event.i.txt ~= "" then do
  278.                 address command 'run >nil: rx >nil: ezcron:rexx/Reminder.rexx' event.i.txt /*This calls the external rexx proggy for the event display */
  279.                 if showlist(h,SPEAK) then do
  280.                         address command 'echo' event.i.txt '>speak:'
  281.                 end
  282.             end
  283.  
  284.             if event.i.time = clock2 & event.i.date = date
  285.             then event.i.date = 'Finished with Event'
  286.  
  287.         end       /* end of 'do i = 1 to event.0' */
  288.     end             /* end of do forever */
  289.  
  290.  
  291. /* ======== CLEANUP == */
  292.     if event.0 = 0 then exit
  293.     options failat 300
  294.     trace 'Off'
  295.  
  296. /* ======== Arexx Port Message Check == */
  297. aport:
  298.     Cmd = getarg(Pkt)
  299.     if Cmd = 'STOP' then do
  300.         call reply(Pkt, rc)
  301.         exit
  302.     end
  303.